{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.table import Table\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "WORLD_SIZE = 4\n",
    "ACTIONS = [\n",
    "    np.array([0, -1]),\n",
    "    np.array([-1, 0]),\n",
    "    np.array([0, 1]),\n",
    "    np.array([1, 0]),\n",
    "]\n",
    "ACTION_PROB = 0.25\n",
    "def is_terminal(state):\n",
    "    x, y = state\n",
    "    return (x == 0 and y == 0) or (x == WORLD_SIZE - 1 and y == WORLD_SIZE - 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def step(state, action):\n",
    "    if is_terminal(state):\n",
    "        return state, 0\n",
    "    \n",
    "    next_state = (np.array(state) + action).tolist()\n",
    "    x, y = next_state\n",
    "\n",
    "    if x < 0 or x >= WORLD_SIZE or y < 0 or y >= WORLD_SIZE:\n",
    "        next_state = state\n",
    "    \n",
    "    reward = -1\n",
    "    return next_state, reward\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "def draw_image(image):\n",
    "    fig, ax = plt.subplots()\n",
    "    ax.set_axis_off()\n",
    "    tb = Table(ax, bbox=[0, 0, 1, 1])\n",
    "\n",
    "    nrows, ncols = image.shape\n",
    "    width, height = 1.0 / ncols, 1.0 / nrows\n",
    "\n",
    "\n",
    "    for (i, j), val in np.ndenumerate(image):\n",
    "        tb.add_cell(i, j, width, height, text=val,\n",
    "                    loc='center', facecolor='white')\n",
    "    for i in range(len(image)):\n",
    "        tb.add_cell(i, -1, width, height, text=i+1, loc='right',\n",
    "                    edgecolor='none', facecolor='none')\n",
    "        tb.add_cell(-1, i, width, height/2, text=i+1, loc='center',\n",
    "                    edgecolor='none', facecolor='none')\n",
    "    \n",
    "    ax.add_table(tb)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "def compute_state_value(in_place=False, discount=1.0):\n",
    "    new_state_values = np.zeros((WORLD_SIZE, WORLD_SIZE))\n",
    "    iterator = 1\n",
    "    while True:\n",
    "        if in_place:\n",
    "            state_values = new_state_values\n",
    "        else:\n",
    "            state_values = new_state_values.copy()\n",
    "        old_state_values = state_values.copy()\n",
    "        for i in range(WORLD_SIZE):\n",
    "            for j in range(WORLD_SIZE):\n",
    "                value = 0\n",
    "                for action in ACTIONS:\n",
    "                    (next_i, next_j), reward = step([i, j], action)\n",
    "                    value += ACTION_PROB * (reward + discount * (state_values[next_i, next_j]))\n",
    "                new_state_values[i, j] = value\n",
    "        if abs(new_state_values - old_state_values).max() < 1e-4:\n",
    "            break\n",
    "        iterator += 1\n",
    "    return new_state_values, iterator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "In-place: 114 iterations\n",
      "Synchronous: 173 iterations\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "def figure_4_1():\n",
    "    # While the author suggests using in-place iterative policy evaluation,\n",
    "    # Figure 4.1 actually uses out-of-place version.\n",
    "    _, asycn_iteration = compute_state_value(in_place=True)\n",
    "    values, sync_iteration = compute_state_value(in_place=False)\n",
    "    draw_image(np.round(values, decimals=2))\n",
    "    print('In-place: {} iterations'.format(asycn_iteration))\n",
    "    print('Synchronous: {} iterations'.format(sync_iteration))\n",
    "\n",
    "    # plt.savefig('../images/figure_4_1.png')\n",
    "    # plt.close()\n",
    "figure_4_1()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "def compute_state_values(in_place=False, discount=1.0):\n",
    "    new_state_values = np.zeros((WORLD_SIZE, WORLD_SIZE))\n",
    "    iterator = 1\n",
    "    return_v = []\n",
    "    return_v.append(new_state_values.copy())\n",
    "    while True:\n",
    "        if in_place:\n",
    "            state_values = new_state_values\n",
    "        else:\n",
    "            state_values = new_state_values.copy()\n",
    "        old_state_values = state_values.copy()\n",
    "        for i in range(WORLD_SIZE):\n",
    "            for j in range(WORLD_SIZE):\n",
    "                value = 0\n",
    "                for action in ACTIONS:\n",
    "                    (next_i, next_j), reward = step([i, j], action)\n",
    "                    value += ACTION_PROB * (reward + discount * (state_values[next_i, next_j]))\n",
    "                new_state_values[i, j] = value\n",
    "        if abs(new_state_values - old_state_values).max() < 1e-4:\n",
    "            break\n",
    "        iterator += 1\n",
    "        return_v.append(new_state_values.copy())\n",
    "    return return_v"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K= 0\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAGzCAYAAAC/y6a9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAaZUlEQVR4nO3cX2jd9f348VeSmmROrXPFliJF2dTGP60ksyWKc9NoGUXMbpSyajcKOolD6c06UXszqDAZG64TYWAvqlQdtMKMutDNVms660nLWpsJg7J6YVp7I1pZlZP390KW/fIz1UWTfE7zejygF/n0/Qmv9HVxnpycT5tKKSUAAEijueoBAACYWQIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAUh6u3btiltuuSUWLlwYTU1NsX379qpHYhpt3Lgxrr766jj77LPj/PPPj97e3nj77berHotp8vjjj8eSJUvinHPOiXPOOSe6u7vjxRdfrHosZsAjjzwSTU1Ncf/991c9SkMSgKR34sSJWLp0aWzatKnqUZgBO3fujL6+vtizZ08MDAzEJ598EjfffHOcOHGi6tGYBhdccEE88sgjUavV4s0334wbbrghbr311njrrbeqHo1ptHfv3njiiSdiyZIlVY/SsJpKKaXqIaBRNDU1xbZt26K3t7fqUZgh7733Xpx//vmxc+fO+O53v1v1OMyA8847L371q1/F2rVrqx6FafDhhx9GZ2dn/P73v49f/vKXcdVVV8VvfvObqsdqON4BBFJ7//33I+LTKGB2q9frsXXr1jhx4kR0d3dXPQ7TpK+vL1auXBk9PT1Vj9LQ5lQ9AEBVRkdH4/77749rr702rrjiiqrHYZocOHAguru749///necddZZsW3btrjsssuqHotpsHXr1hgaGoq9e/dWPUrDE4BAWn19fXHw4MF47bXXqh6FaXTppZfG/v374/33348//vGPsWbNmti5c6cInGXeeeeduO+++2JgYCDa29urHqfh+Qwg/D98BjCPe++9N55//vnYtWtXXHTRRVWPwwzq6emJb33rW/HEE09UPQpT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TqmjoyM6OzurHoNp9p9fC9l3Dvadi31zKh4CAQBIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgJwlti4cWNcffXVcfbZZ8f5558fvb298fbbb1c9VsPZtGlTXHjhhdHe3h7Lly+PN95443PPP/fcc7F48eJob2+PK6+8Mvr7+2doUqaCfedi37nY91cjAGeJnTt3Rl9fX+zZsycGBgbik08+iZtvvjlOnDhR9WgN45lnnol169bFhg0bYmhoKJYuXRorVqyIY8eOTXj+9ddfj1WrVsXatWtj37590dvbG729vXHw4MEZnpwvw75zse9c7HsKFGalY8eOlYgoO3funPS9tVqtRESp1WrTMFl1li1bVvr6+sa+rtfrZeHChWXjxo0Tnr/tttvKypUrx11bvnx5ufvuu6d1zpm2ZcsW+y72fbqz74nZ96ey7Hsyr9/eAZyl3n///YiIOO+88yqepDF8/PHHUavVoqenZ+xac3Nz9PT0xODg4IT3DA4OjjsfEbFixYpTnqdx2Hcu9p2LfU8NATgLjY6Oxv333x/XXnttXHHFFVWP0xCOHz8e9Xo95s+fP+76/PnzY2RkZMJ7RkZGJnWexmHfudh3LvY9NeZUPQBTr6+vLw4ePBivvfZa1aMAAA1IAM4y9957b/zpT3+KXbt2xQUXXFD1OA1j3rx50dLSEkePHh13/ejRo7FgwYIJ71mwYMGkztM47DsX+87FvqeGXwHPEqWUuPfee2Pbtm3xl7/8JS666KKqR2oora2t0dXVFTt27Bi7Njo6Gjt27Iju7u4J7+nu7h53PiJiYGDglOdpHPadi33nYt9TZPqfSWEm3HPPPWXu3LnllVdeKe++++7Yn48++mjS32u2PgW8devW0tbWVjZv3lwOHTpU7rrrrnLuueeWkZGRUkopd9xxR1m/fv3Y+d27d5c5c+aURx99tAwPD5cNGzaUM844oxw4cKCqH2FazNanBO17Yvb9Kfs+vdn3xCbz+i0AZ4mImPDPk08+OenvNVsDsJRSHnvssbJo0aLS2tpali1bVvbs2TP2d9dff31Zs2bNuPPPPvtsueSSS0pra2u5/PLLywsvvDDDE0+/2foCUYp9T8S+/8u+T2/2/VmTef1uKqWUmX/fkUY2NDQUXV1dUavVorOzs+pxmGZPPfVUrF692r6TsO9c7DuXybx++wwgAEAyAhAAIBkBCACQjAAEAEhGAAIAJCMAAQCSEYAAAMkIQACAZAQgAEAyAhAAIBkBCACQjAAEAEhGAAIAJCMAAQCSEYAAAMkIQACAZAQgAEAyAhAAIBkBCACQjAAEAEhGAAIAJCMAAQCSEYAAAMkIQACAZAQgAEAyAhAAIBkBCACQjAAEAEhGAAIAJCMAAQCSEYAAAMkIQACAZAQgAEAyAhAAIBkBCACQjAAEAEhGAAIAJCMAAQCSEYAAAMnMqXoAGld/f38MDw9XPQbTbPfu3RFh31nYdy72ncvhw4f/57NNpZQyjbNwGhocHIzrrrsu6vV61aMwQ5qbm2N0dLTqMZgh9p2LfefS0tISr776anR3d3/uOe8A8hltbW1Rr9djy5Yt0dHRUfU4TLP+/v546KGH7DsJ+87FvnMZHh6O1atXR1tb2xeeFYCcUkdHR3R2dlY9BtPsP78Wsu8c7DsX++ZUPAQCAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBOAs8fjjj8eSJUvinHPOiXPOOSe6u7vjxRdfrHqshrNp06a48MILo729PZYvXx5vvPHG555/7rnnYvHixdHe3h5XXnll9Pf3z9CkTAX7zsW+c7Hvr0YAzhIXXHBBPPLII1Gr1eLNN9+MG264IW699dZ46623qh6tYTzzzDOxbt262LBhQwwNDcXSpUtjxYoVcezYsQnPv/7667Fq1apYu3Zt7Nu3L3p7e6O3tzcOHjw4w5PzZdh3Lvadi31PgcKs9Y1vfKP84Q9/mPR9tVqtRESp1WrTMFV1li1bVvr6+sa+rtfrZeHChWXjxo0Tnr/tttvKypUrx11bvnx5ufvuu6d1zpm2ZcsW+y72fbqz74nZ96ey7Hsyr9/eAZyF6vV6bN26NU6cOBHd3d1Vj9MQPv7446jVatHT0zN2rbm5OXp6emJwcHDCewYHB8edj4hYsWLFKc/TOOw7F/vOxb6nhgCcRQ4cOBBnnXVWtLW1xU9/+tPYtm1bXHbZZVWP1RCOHz8e9Xo95s+fP+76/PnzY2RkZMJ7RkZGJnWexmHfudh3LvY9NQTgLHLppZfG/v37429/+1vcc889sWbNmjh06FDVYwEADWZO1QMwdVpbW+Pb3/52RER0dXXF3r1747e//W088cQTFU9WvXnz5kVLS0scPXp03PWjR4/GggULJrxnwYIFkzpP47DvXOw7F/ueGt4BnMVGR0fj5MmTVY/REFpbW6Orqyt27Ngxdm10dDR27Nhxys9Jdnd3jzsfETEwMOBzlacB+87FvnOx7ykyAw+lMAPWr19fdu7cWQ4fPlz+/ve/l/Xr15empqby5z//edLfa7Y+Bbx169bS1tZWNm/eXA4dOlTuuuuucu6555aRkZFSSil33HFHWb9+/dj53bt3lzlz5pRHH320DA8Plw0bNpQzzjijHDhwoKofYVrM1qcE7Xti9v0p+z692ffEJvP67VfAs8SxY8fizjvvjHfffTfmzp0bS5YsiZdffjluuummqkdrGLfffnu899578fDDD8fIyEhcddVV8dJLL419MPjIkSPR3PzfN8WvueaaePrpp+PBBx+MBx54IC6++OLYvn17XHHFFVX9CEyCfedi37nY91fXVEopVQ9BYxkaGoqurq6o1WrR2dlZ9ThMs6eeeipWr15t30nYdy72nctkXr99BhAAIBkBCACQjAAEAEhGAAIAJCMAAQCSEYAAAMkIQACAZAQgAEAyAhAAIBkBCACQjAAEAEhGAAIAJCMAAQCSEYAAAMkIQACAZAQgAEAyAhAAIBkBCACQjAAEAEhGAAIAJCMAAQCSEYAAAMkIQACAZAQgAEAyAhAAIBkBCACQjAAEAEhGAAIAJCMAAQCSEYAAAMkIQACAZAQgAEAyAhAAIBkBCACQjAAEAEhGAAIAJCMAAQCSEYAAAMkIQACAZAQgAEAyc6oegMbV398fw8PDVY/BNNu9e3dE2HcW9p2Lfedy+PDh//lsUymlTOMsnIYGBwfjuuuui3q9XvUozJDm5uYYHR2tegxmiH3nYt+5tLS0xKuvvhrd3d2fe847gHxGW1tb1Ov12LJlS3R0dFQ9DtOsv78/HnroIftOwr5zse9choeHY/Xq1dHW1vaFZwUgp9TR0RGdnZ1Vj8E0+8+vhew7B/vOxb45FQ+BAAAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQE4Sz3yyCPR1NQU999/f9WjNJRNmzbFhRdeGO3t7bF8+fJ44403Pvf8c889F4sXL4729va48soro7+/f4YmZSrYdy72nYt9fzUCcBbau3dvPPHEE7FkyZKqR2kozzzzTKxbty42bNgQQ0NDsXTp0lixYkUcO3ZswvOvv/56rFq1KtauXRv79u2L3t7e6O3tjYMHD87w5HwZ9p2Lfedi31OgMKt88MEH5eKLLy4DAwPl+uuvL/fdd9+kv0etVisRUWq12tQPWKFly5aVvr6+sa/r9XpZuHBh2bhx44Tnb7vttrJy5cpx15YvX17uvvvuaZ1zpm3ZssW+i32f7ux7Yvb9qSz7nszrt3cAZ5m+vr5YuXJl9PT0VD1KQ/n444+jVquN+3dpbm6Onp6eGBwcnPCewcHBz/w7rlix4pTnaRz2nYt952LfU2NO1QMwdbZu3RpDQ0Oxd+/eqkdpOMePH496vR7z588fd33+/Pnxj3/8Y8J7RkZGJjw/MjIybXMyNew7F/vOxb6nhgCcJd5555247777YmBgINrb26seBwBoYAJwlqjVanHs2LHo7Owcu1av12PXrl3xu9/9Lk6ePBktLS0VTlitefPmRUtLSxw9enTc9aNHj8aCBQsmvGfBggWTOk/jsO9c7DsX+54aPgM4S9x4441x4MCB2L9//9if73znO/GjH/0o9u/fnzr+IiJaW1ujq6srduzYMXZtdHQ0duzYEd3d3RPe093dPe58RMTAwMApz9M47DsX+87FvqfIDDyUQkU8BTze1q1bS1tbW9m8eXM5dOhQueuuu8q5555bRkZGSiml3HHHHWX9+vVj53fv3l3mzJlTHn300TI8PFw2bNhQzjjjjHLgwIGqfoRpMVufErTvidn3p+z79GbfE5vM67dfAZPG7bffHu+99148/PDDMTIyEldddVW89NJLYx8MPnLkSDQ3//dN8WuuuSaefvrpePDBB+OBBx6Iiy++OLZv3x5XXHFFVT8Ck2Dfudh3Lvb91TWVUkrVQ9BYhoaGoqurK2q12rjPFDI7PfXUU7F69Wr7TsK+c7HvXCbz+u0zgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMAAQASEYAAgAkM6fqAWhcw8PDVY/ADDh8+HBE2HcW9p2LfecymT03lVLKNM7CaejIkSPR0dERH330UdWjMENaWlqiXq9XPQYzxL5zse9czjzzzBgeHo5FixZ97jkByISOHDkSx48fr3oMZsjJkyejra2t6jGYIfadi33nMm/evC+MvwgBCACQjodAAACSEYAAAMkIQACAZAQgAEAyAhAAIBkBCACQjAAEAEjm/wC020/7wVHRVQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K= 1\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAGzCAYAAAC/y6a9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAbHUlEQVR4nO3cX2zVhf3/8Xep4Y9SzcBJI4Zpvkypf0CL0nTq2JRBTCN2N2xmBOa4MEtdMNwsXjhulqDZTFw25yRL2AUlVRfBZdY5wiYwqRMONBHXkZg0qYkWRkyM1oim/fwuFuv6A5U/Pf2U8348kl707Jzmra8sfXJsqSuKoggAANKYUvYBAABMLAEIAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMAAQASEYAAgAkIwABAJIRgAAAyQhAAIBkBCAAQDICEAAgGQEIAJCMACS9PXv2xN133x2XX3551NXVxY4dO8o+iSratGlT3HLLLdHQ0BCXXXZZtLe3x5EjR8o+iyp58sknY+HChXHxxRfHxRdfHK2trfHiiy+WfRYT4JFHHom6urp48MEHyz5lUhKApDc0NBSLFi2KJ554ouxTmAC7d++Ojo6OePXVV2Pnzp3xySefxPLly2NoaKjs06iCK664Ih555JGoVCpx4MCBuOOOO+Kee+6JN954o+zTqKL9+/fHU089FQsXLiz7lEmrriiKouwjYLKoq6uL7du3R3t7e9mnMEH+85//xGWXXRa7d++Ob37zm2WfwwSYNWtW/OIXv4h169aVfQpV8MEHH0Rzc3P89re/jZ///Odx4403xuOPP172WZOOdwCB1N57772I+G8UUNuGh4ejq6srhoaGorW1texzqJKOjo5oa2uLZcuWlX3KpHZB2QcAlGVkZCQefPDBuPXWW+P6668v+xyq5PXXX4/W1tb46KOPYubMmbF9+/a49tpryz6LKujq6oqDBw/G/v37yz5l0hOAQFodHR1x+PDh+Mc//lH2KVTRNddcE729vfHee+/FH//4x1i7dm3s3r1bBNaYt956K9avXx87d+6M6dOnl33OpOdnAOF/+BnAPB544IF4/vnnY8+ePXHVVVeVfQ4TaNmyZfF///d/8dRTT5V9CuNox44d8d3vfjfq6+tHHxseHo66urqYMmVKnDhxYsz/lp13AIFUiqKIn/zkJ7F9+/Z4+eWXxV9CIyMjceLEibLPYJzdeeed8frrr4957L777osFCxbET3/6U/H3/xGApPfBBx/Em2++Ofp5f39/9Pb2xqxZs2LevHklXkY1dHR0xLZt2+L555+PhoaGGBwcjIiISy65JGbMmFHydYy3hx56KO66666YN29evP/++7Ft27Z4+eWX46WXXir7NMZZQ0PDST/Le9FFF8Xs2bP9jO8pCEDSO3DgQHz7298e/XzDhg0REbF27dr4wx/+UNJVVMuTTz4ZERHf+ta3xjy+ZcuW+OEPfzjxB1FVx44dizVr1sQ777wTl1xySSxcuDBeeuml+M53vlP2aVAqPwMIAJCMvwcQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMheUfQCT08DAQBw/frzsM5ggJ06ciGnTppV9BhPE3rnYO5dLL7005s2b96XPE4CcZGBgIJqamuLDDz8s+xQmSH19fQwPD5d9BhPE3rnYO5cLL7ww+vr6vjQCBSAnOX78eHz44YexdevWaGpqKvscqqy7uzsefvhheydh71zsnUtfX1+sXr06jh8/LgA5e01NTdHc3Fz2GVRZX19fRNg7C3vnYm8+j18CAQBIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgKwRuzZsyfuvvvuuPzyy6Ouri527NhR9kmT0hNPPBFXXnllTJ8+PVpaWuK11177wuc/++yzsWDBgpg+fXrccMMN0d3dPUGXMh6ee+65WL58ecyePTvq6uqit7f3tF5n9/OTvXOx97kRgDViaGgoFi1aFE888UTZp0xaTz/9dGzYsCE2btwYBw8ejEWLFsWKFSvi2LFjp3z+vn374t57741169bFoUOH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037Nvn374t57741169bFoUOHor29Pdrb2+Pw4cNVvJTxYO9c7J2Lvc9RQc36yle+Uvz+978/49dVKpUiIopKpVKFqyaH/v7+IiKKQ4cOfelzV61aVbS1tY15rKWlpbj//vurdN3E2rp1q73/h73Pf/b+jL3HqvW9z+T7t3cAa9Dw8HB0dXXF0NBQtLa2ln3Oea+npyeWLVs25rEVK1ZET09PSRdRTfbOxd652PszF5R9AOPn9ddfj9bW1vjoo49i5syZsX379rj22mvLPuu8Nzg4GHPmzBnz2Jw5c2JwcLCki6gme+di71zs/RnvANaQa665Jnp7e+Of//xn/PjHP461a9fGv/71r7LPKk1nZ2fMnDlz9GPv3r1ln0QV2TsXe+di7/HnHcAaMnXq1Jg/f35ERCxevDj2798fv/rVr+Kpp54q+bJyrFy5MlpaWkY/nzt37ll9ncbGxjh69OiYx44ePRqNjY3ndB/jy9652DsXe48/7wDWsJGRkThx4kTZZ5SmoaEh5s+fP/oxY8aMs/o6ra2tsWvXrjGP7dy5089XTjL2zsXeudh7/HkHsEY89NBDcdddd8W8efPi/fffj23btsXLL78cL730UtmnTSrvvvtuDAwMxNtvvx0REUeOHImI//6p8NM/Aa5Zsybmzp0bmzZtioiI9evXx9KlS+Oxxx6Ltra26OrqigMHDsTmzZvL+YfgtNk7F3vnYu9zNAG/lcwE+NGPflR87WtfK6ZOnVp89atfLe68887ir3/961l9rVr+a2C2bNlSRMRJHxs3bhx9ztKlS4u1a9eOed0zzzxTXH311cXUqVOL6667rnjhhRcm9vAqquW/JsLeJ7O3vWuFvU92Jt+/64qiKCasNjkvHDx4MBYvXhyVSiWam5vLPocq6+zsjNWrV9s7CXvnYu9czuT7t58BBABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkMwFZR/A5NXd3R19fX1ln0GVvfLKKxFh7yzsnYu9c+nv7z/t59YVRVFU8RbOQz09PXH77bfH8PBw2acwQaZMmRIjIyNln8EEsXcu9s6lvr4+9u7dG62trV/4PO8AcpJp06bF8PBwbN26NZqamso+hyrr7u6Ohx9+2N5J2DsXe+fS19cXq1evjmnTpn3pcwUgn6upqSmam5vLPoMq+/Q/C9k7B3vnYm8+j18CAQBIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABIRgACACQjAAEAkhGAAADJCEAAgGQEIABAMgKwRj3yyCNRV1cXDz74YNmnTCrPPfdcLF++PGbPnh11dXXR29t7Wq979tlnY8GCBTF9+vS44YYboru7u7qHMi7snYu9c3niiSfiyiuvjOnTp0dLS0u89tprX/h8O48lAGvQ/v3746mnnoqFCxeWfcqkMzQ0FLfddls8+uijp/2affv2xb333hvr1q2LQ4cORXt7e7S3t8fhw4ereCnjwd652DuPp59+OjZs2BAbN26MgwcPxqJFi2LFihVx7NixUz7fzqdQUFPef//94utf/3qxc+fOYunSpcX69evP+GtUKpUiIopKpTL+B04S/f39RUQUhw4d+tLnrlq1qmhraxvzWEtLS3H//fdX6bqJtXXrVnv/D3uf/+z9mVrde8mSJUVHR8fo58PDw8Xll19ebNq06ZTPr/WdP3Um37+9A1hjOjo6oq2tLZYtW1b2KTWjp6fnpH+fK1asiJ6enpIuoprsnYu9zz8ff/xxVCqVMbtNmTIlli1b9rm72flkF5R9AOOnq6srDh48GPv37y/7lJoyODgYc+bMGfPYnDlzYnBwsKSLqCZ752Lv88/x48djeHj4lLv9+9//PuVr7Hwy7wDWiLfeeivWr18fnZ2dMX369LLPmRQ6Oztj5syZox979+4t+ySqyN652BvOjXcAa0SlUoljx45Fc3Pz6GPDw8OxZ8+e+M1vfhMnTpyI+vr6Ei+ceCtXroyWlpbRz+fOnXtWX6exsTGOHj065rGjR49GY2PjOd3H+LJ3LvbO69JLL436+voz2s3OJ/MOYI2488474/XXX4/e3t7Rj5tvvjl+8IMfRG9vb7r4i4hoaGiI+fPnj37MmDHjrL5Oa2tr7Nq1a8xjO3fujNbW1vE4k3Fi71zsndfUqVNj8eLFY3YbGRmJXbt2fe5udj6ZdwBrRENDQ1x//fVjHrvoooti9uzZJz2e2bvvvhsDAwPx9ttvR0TEkSNHIuK/fzr89E+Ca9asiblz58amTZsiImL9+vWxdOnSeOyxx6KtrS26urriwIEDsXnz5nL+ITht9s7F3nls2LAh1q5dGzfffHMsWbIkHn/88RgaGor77rsvIux8OrwDSCp/+tOf4qabboq2traIiPj+978fN910U/zud78bfc7AwEC88847o59/4xvfiG3btsXmzZtj0aJF8cc//jF27NghrM8D9s7F3nl873vfi1/+8pfxs5/9LG688cbo7e2Nv/zlL6O/6GHnL1dXFEVR9hFMLgcPHozFixdHpVIZ8zOF1KbOzs5YvXq1vZOwdy72zuVMvn97BxAAIBkBCACQjAAEAEhGAAIAJCMAAQCSEYAAAMkIQACAZAQgAEAyAhAAIBkBCACQjAAEAEhGAAIAJCMAAQCSEYAAAMkIQACAZAQgAEAyAhAAIBkBCACQjAAEAEhGAAIAJCMAAQCSEYAAAMkIQACAZAQgAEAyAhAAIBkBCACQjAAEAEhGAAIAJCMAAQCSEYAAAMkIQACAZAQgAEAyAhAAIBkBCACQjAAEAEhGAAIAJCMAAQCSEYAAAMkIQACAZC4o+wAmr76+vrJPYAL09/dHhL2zsHcu9s7lTHauK4qiqOItnIcGBgaiqakpPvzww7JPYYLU19fH8PBw2WcwQeydi71zufDCC6Ovry/mzZv3hc8TgJzSwMBAHD9+vOwzmCAnTpyIadOmlX0GE8Teudg7l0svvfRL4y9CAAIApOOXQAAAkhGAAADJCEAAgGQEIABAMgIQACAZAQgAkIwABABI5v8BSdBkjDXS4jsAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K= 2\n"
     ]
    },
    {
     "data": {
      "image/png": "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H31Ud9xxh06cOKFnnnlGy5cvV1tbm7xer0vTRh+vACaQRYsWqbOzU3/729+0du1aVVVV6R//+IfbY7mmoaFBM2bMCH8cOnQofNvw8LBWrlwpx3G0bds2F6fEVGHftrDvxHat/U5UXV2dsrKylJOTE3G8vLxcZWVlysrKks/n0969e9XR0aHW1tZJf814xiuACWTatGlauHChJGnZsmXq6OjQ7373O73++usuT+aOsrIy5ebmhj+fN2+epP/+cDh58qQ+/PDDq746IEnp6enyer06ffp0xPHTp09r7ty50RkcE8K+bWHfie1q+52oYDCoxsZGvfDCC2Oee+eddyo9PV3Hjx9XQUHBpL5uPCMAE9jIyIiGhobcHsM1qampSk1NjTh2+YfDp59+qv379ystLe2a9zFt2jQtW7ZMLS0t8vl8kr75c21padG6deuiNTomgH3bwr4T25X2Oxk7d+7U0NCQKioqxjz3888/17lz53TbbbdN2dePR/wKOEFs2LBBBw8e1GeffaZjx45pw4YNam1t1U9/+lO3R4sbw8PDevzxx3XkyBE1NDQoFAqpv79f/f39unTpUvi8goICvfbaa+HPa2pq9Mc//lHbt29Xd3e31q5dq2AwqDVr1rjxMHCd2Lct7DvxffXVV+rs7Ay/tamnp0ednZ3q7+8Pn1NZWakNGzaMuraurk4+n2/UXwoGBwf1y1/+Uh9//LE+++wztbS0aMWKFVq4cKGKi4uj+4BcxiuACeLMmTOqrKzUqVOndMstt2jx4sV677339JOf/MTt0eLGF198oT179kiSsrOzI27bv3+/8vPzJUknTpzQwMBA+LYnn3xSZ8+e1bPPPqv+/n5lZ2fr3XffHfXGccQX9m0L+058e/bsiQjz8vJySdKmTZv03HPPSZL6+vqUlBT52lZPT48OHz6s999/f9R9er1effLJJ9q+fbu+/vprZWRkqKioSC+++KKSk5Oj92DigMdxHMftIRBfAoGAli1bJr/fr6VLl7o9DqKsoaFBFRUV7NsI9m0L+7ZlPD+/+RUwAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMTe5PQDiV3Nzs7q7u90eA1H20UcfSWLfVrBvW9i3Lb29vdd9rsdxHCeKs+AG1NbWpgcffFChUMjtURAjSUlJGhkZcXsMxAj7toV92+L1enXo0CHl5eVd8zxeAcQoycnJCoVCqq+vV2ZmptvjIMqam5u1ceNG9m0E+7aFfdvS3d2tiooKJScnj3kuAYiryszM1NKlS90eA1F2+ddC7NsG9m0L+8bV8I9AAAAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAAQAAjCEAE9RLL70kj8ejp59+2u1R4sbw8LBqa2uVlZWllJQUZWRkqLKyUl9++eWY127dulULFizQ9OnTlZubq/b29hhMjMlg34mvqalJRUVFSktLk8fjUWdn55jX5Ofny+PxjPooLS0Nn7N69epRt5eUlETxkWAixvs83blzp+6++25Nnz5dWVlZam5ujtGk8YkATEAdHR16/fXXtXjxYrdHiSsXLlxQIBDQxo0bFQgE1NTUpJ6eHpWVlV3zurfeeks1NTXatGmTAoGAlixZouLiYp05cyZGk2Mi2HfiCwaDeuCBB7Rly5brvqapqUmnTp0Kf3R1dcnr9eqJJ56IOK+kpCTivDfffHOqx8ckjPd5+te//lWrVq3SU089paNHj8rn88nn86mrqyvGk8cRBwnl3//+t3PXXXc5+/btcx566CFn/fr1474Pv9/vSHL8fv/UDxhn2tvbHUnOyZMnr3pOTk6OU11dHf48FAo5GRkZzubNm2MxYtTV19ez7//Bvm88vb29jiTn6NGj4772lVdecVJTU53BwcHwsaqqKmfFihVTN6CLEnHfjjP+5+nKlSud0tLSiGO5ubnOz3/+86jOGWvj+fnNK4AJprq6WqWlpSosLHR7lBvC+fPn5fF4dOutt17x9kuXLsnv90f8eSYlJamwsFBtbW0xmhJThX3j2+rq6lReXq6UlJSI462trZo9e7YWLVqktWvX6ty5cy5NiG+byPO0ra1t1M/F4uJi08/rm9weAFOnsbFRgUBAHR0dbo9yQ7h48aJqa2u1atUqzZw584rnDAwMKBQKac6cORHH58yZo3/+85+xGBNThH3j29rb29XV1aW6urqI4yUlJXr00Ud1xx136MSJE3rmmWe0fPlytbW1yev1ujQtLpvI87S/v/+K5/f390dtznjHK4AJ4l//+pfWr1+vhoYGTZ8+3e1x4kJDQ4NmzJgR/jh06FD4tuHhYa1cuVKO42jbtm0uTompwr4T27X2O1F1dXXKyspSTk5OxPHy8nKVlZUpKytLPp9Pe/fuVUdHh1pbWyf9NYF4wSuACcLv9+vMmTNaunRp+FgoFNLBgwf12muvaWhoyNzfXMvKypSbmxv+fN68eZL+GwMnT57Uhx9+eNVXgyQpPT1dXq9Xp0+fjjh++vRpzZ07NzqDY0LYd2K72n4nKhgMqrGxUS+88MKY5955551KT0/X8ePHVVBQMKmvi8mbyPN07ty5PK+/hVcAE0RBQYGOHTumzs7O8Me9996rn/70p+rs7DQXf5KUmpqqhQsXhj9uvvnmcAx8+umn+uCDD5SWlnbN+5g2bZqWLVumlpaW8LGRkRG1tLQoLy8v2g8B48C+E9uV9jsZO3fu1NDQkCoqKsY89/PPP9e5c+d02223TeprYmpM5Hmal5cXcb4k7du3z/TzmlcAE0RqaqruueeeiGMpKSlKS0sbddyq4eFhPf744woEAtq7d69CoVD4/R+zZs3StGnTJH0T04888ojWrVsnSaqpqVFVVZXuvfde5eTk6NVXX1UwGNSaNWtceywYG/tOfF999ZX6+vrC/7djT0+PpG9e7bn8yk5lZaXmzZunzZs3R1xbV1cnn8836i8Fg4ODev755/XYY49p7ty5OnHihH71q19p4cKFKi4ujsGjwvUY63n67b2vX79eDz30kF5++WWVlpaqsbFRR44c0R/+8Ac3H4arCECY8cUXX2jPnj2SpOzs7Ijb9u/fr/z8fEnSiRMnNDAwEL7tySef1NmzZ/Xss8+qv79f2dnZevfdd0e9oRjxhX0nvj179kSEeXl5uSRp06ZNeu655yRJfX19SkqK/GVXT0+PDh8+rPfff3/UfXq9Xn3yySfavn27vv76a2VkZKioqEgvvviikpOTo/dgMC5jPU+/vff77rtPO3bs0K9//Ws988wzuuuuu7R7927TL5B4HMdx3B4C8SUQCGjZsmXy+/0R7ylEYmpoaFBFRQX7NoJ928K+bRnPz2/eAwgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGDMTW4PgPjV3d3t9giIgd7eXkns2wr2bQv7tmU8e/Y4juNEcRbcgPr6+pSZmakLFy64PQpixOv1KhQKuT0GYoR928K+bfnOd76j7u5uzZ8//5rnEYC4or6+Pg0MDLg9BmJkaGhIycnJbo+BGGHftrBvW9LT08eMP4kABAAAMId/BAIAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGDM/wO1th91taA/7QAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K= 3\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K= 10\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K= -1\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "def figure_4_1_1():\n",
    "    # While the author suggests using in-place iterative policy evaluation,\n",
    "    # Figure 4.1 actually uses out-of-place version.\n",
    "    values = compute_state_values(in_place=False)\n",
    "    print(\"K=\", 0)\n",
    "    draw_image(np.round(values[0], decimals=2))\n",
    "    print(\"K=\", 1)\n",
    "    draw_image(np.round(values[1], decimals=2))\n",
    "    print(\"K=\", 2)\n",
    "    draw_image(np.round(values[2], decimals=2))\n",
    "    print(\"K=\", 3)\n",
    "    draw_image(np.round(values[3], decimals=2))\n",
    "    print(\"K=\", 10)\n",
    "    draw_image(np.round(values[10], decimals=2))\n",
    "    print(\"K=\", -1)\n",
    "    draw_image(np.round(values[-1], decimals=2))\n",
    "    # plt.savefig('../images/figure_4_1.png')\n",
    "    # plt.close()\n",
    "figure_4_1_1()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "def compute_state_value_faster(in_place=False, discount=1.0):\n",
    "    new_state_values = np.zeros((WORLD_SIZE, WORLD_SIZE))\n",
    "    iterator = 1\n",
    "    while True:\n",
    "        if in_place:\n",
    "            state_values = new_state_values\n",
    "        else:\n",
    "            state_values = new_state_values.copy()\n",
    "        old_state_values = state_values.copy()\n",
    "        for i in range(WORLD_SIZE):\n",
    "            for j in range(WORLD_SIZE):\n",
    "                value = 0\n",
    "                min_q = -100000000\n",
    "                num = 0\n",
    "                for action in ACTIONS:\n",
    "                    (next_i, next_j), reward = step([i, j], action)\n",
    "                    if (min_q < state_values[next_i, next_j]):\n",
    "                        value = 0\n",
    "                        num = 0\n",
    "                        min_q = state_values[next_i, next_j]\n",
    "                    elif min_q > state_values[next_i, next_j]:\n",
    "                        continue\n",
    "                    num += 1\n",
    "                    value += ACTION_PROB * (reward + discount * (state_values[next_i, next_j]))\n",
    "                value = value * 4 / num\n",
    "                new_state_values[i, j] = value\n",
    "        # print(new_state_values)\n",
    "        if abs(new_state_values - old_state_values).max() < 1e-4:\n",
    "            break\n",
    "        iterator += 1\n",
    "    return new_state_values, iterator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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TZo06YG+Tm5urk6ePDngufr6euXm5o7GmBglg+37zpvDtWvXdOLECSUmJt7za0yYMEHZ2dkD9t3f36+TJ0+y7whzv9d3f3+/ent7B32NfY8fXN+jjwCMEqWlpaqurlZtba0SEhLU2dmpzs5O/fe//3V7tIjy008/qbm5Wd98840kqbW1Vc3NzQM+/1FSUjLgbsHmzZt1/Phx7dixQ1evXlVFRYWampq0adOmMZ8f96+vr0+vv/66mpqaVFNTo2AwGLoubt++HTpuxYoV2rVrV+hxWVmZ/vnPf2r//v1qaWnRW2+9pUAgoA0bNrjxbeA+BQIBbd26VV999ZXa29vl9Xr15z//WdevX9eqVatCx7Hv6MD1/fvxK+AocedzD8uWLRvw/EcffaQ33nhj7AeKUEePHh1woa9Zs0aStH37dlVUVEiSOjo6FBPz2/8bPfvss6qtrdU777yjrVu3KjU1VUeOHOEv2ES469ev6+jRo5KkzMzMAa99/vnnoWvlu+++k9/vD722evVqdXV16d1331VnZ6cyMzN1/Pjxuz44jsgSGxurq1evav/+/fL7/UpMTNSiRYvU0NCgefPmhY5j39GB6/v38ziO47g9BCKLz+dTdna2vF6vsrKy3B4HYVZTU6N169axbyPYty3s25aRvH/zK2AAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjCEAAAABjHnJ7AESuuro6tbS0uD0GwuzLL7+UxL6tYN+2sG9b2tra7vtYj+M4ThhnwTjU2Nio559/XsFg0O1RMEZiYmLU39/v9hgYI+zbFvZtS2xsrBoaGpSbm3vP47gDiLtMnDhRwWBQ1dXVSk9Pd3schFldXZ22bdvGvo1g37awb1taWlq0bt06TZw4cdhjCUAMKT09XVlZWW6PgTC782sh9m0D+7aFfWMo/CUQ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HOGGu07Z8/A8juM4bg+ByOLz+ZSdnS2v1zvgM4WITjU1NVq3bh37NoJ928K+bRnJ+zefAQQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADDmIbcHQORqaWlxewSMgba2Nkns2wr2bQv7tmUke/Y4juOEcRaMQx0dHUpPT1dPT4/bo2CMxMbGKhgMuj0Gxgj7toV92/Lwww+rpaVFc+bMuedxBCAG1dHRIb/f7/YYGCO9vb2aOHGi22NgjLBvW9i3LUlJScPGn0QAAgAAmMNfAgEAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADCGAAQAADDm/wFUlOa5n5CTZwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "In-place: 4 iterations\n",
      "Synchronous: 4 iterations\n"
     ]
    }
   ],
   "source": [
    "\n",
    "def figure_4_1():\n",
    "    # While the author suggests using in-place iterative policy evaluation,\n",
    "    # Figure 4.1 actually uses out-of-place version.\n",
    "    _, asycn_iteration = compute_state_value_faster(in_place=True)\n",
    "    values, sync_iteration = compute_state_value_faster(in_place=False)\n",
    "    draw_image(np.round(values, decimals=2))\n",
    "    print('In-place: {} iterations'.format(asycn_iteration))\n",
    "    print('Synchronous: {} iterations'.format(sync_iteration))\n",
    "\n",
    "    # plt.savefig('../images/figure_4_1.png')\n",
    "    # plt.close()\n",
    "figure_4_1()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "rl",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.20"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
